package com.dashanchessgame.chess;

import com.dashanchessgame.tools.ImageTool;

import javax.swing.*;
import java.awt.*;

/**
 * 兵
 * @author 37460
 */
public class ChessArms implements Chess {

    /**
     * chessCheck  检查落子是否合法
     * <p>
     * map              地图
     * nowLineNumber   当前棋子的行号
     * nowColumnNumber 当前棋子的列号
     * toLineNumber    棋子要去的行号
     * toColumnNumber  棋子要去的列号
     * isChessColor     判断棋子的攻守方  黑的返回true 红的返回false
     * 如果可以去，返回true, 否则返回false
     */

    @Override
    public boolean chessCheck(int[][] map, int nowLineNumber, int nowColumnNumber, int toLineNumber, int toColumnNumber, boolean isChessColor) {

        //得到他们之间相差的行数和列数后用来进行判断是否可以去
        //相差的列号
        int istoColumnNumber = toColumnNumber - nowColumnNumber;
        //相差的行号
        int istoLineNumber = toLineNumber - nowLineNumber;
        //判断是否可以前进以及进入对方阵营的走法
        int adsIstoColumnNumber = Math.abs(istoColumnNumber);
        // 判断哪方走
        if (isChessColor) {
            //如果行号<= 4表示黑卒未过河行动受限制只能向前进一格
            //黑卒没有过河
            if (nowLineNumber <= 4) {
                //未过河相差的行数不等于0，并且相差的列数等于1 表示可以可以前进一步
                //如果不是直接false不能移动
                return istoColumnNumber == 0 && istoLineNumber == 1;
            } else {
                //判断黑卒过河，向下前进一格
                if (!((adsIstoColumnNumber == 1 && istoLineNumber == 0) || (adsIstoColumnNumber == 0 && istoLineNumber == 1))) {
                    return false;
                } else {
                    //判断如果此时的位置是对方将军所在的位置确认游戏结束黑方胜利，跳出胜利
                    if (map[toLineNumber][toColumnNumber] == 'J') {
                        JOptionPane.showMessageDialog(null, "黑方胜利！");
                    }
                    //如果不是返回true
                    return true;
                }
            }
        } else {
            if (nowLineNumber >= 5) {
                //判断红卒未过河
                //红卒未过河，向上前进一格
                return istoColumnNumber == 0 && istoLineNumber == -1;
            } else {
                //红卒过河进行判断位置过河坐标
                if (!((adsIstoColumnNumber == 1 && istoLineNumber == 0) || (adsIstoColumnNumber == 0 && istoLineNumber == -1))) {
                    return false;
                } else {
                    if (map[toLineNumber][toColumnNumber] == 1000 + 'J') {
                        JOptionPane.showMessageDialog(null, "红方胜利！");
                    }
                    return true;
                }
            }
        }
    }

    @Override
    public int getType() {
        return 'B';
    }


    @Override
    public Image getImage(boolean isChessColor) {
        return ImageTool.loadImage(isChessColor ? "黑卒.gif" : "红卒.gif");
    }


}
